from flask import Flask, request

# 连接数据库
import pymysql

app = Flask(__name__)

# 解决跨域
from flask_cors import CORS

CORS(app)

import search


# 这里默认的是get请求方式
@app.route('/mol', methods=['GET', 'POST'])
def mol():
    # 定义为全局变量
    global s

    # 接收前端发送的数据 -- post请求
    s = request.form['mol']

    # s = 'COC1C2C[C@H](C[C@@H]([C@@H]([C@H](C=C([C@@H]([C@H](CCC=C(C(NC(C=2)=CC=1O)=O)C)OC)OC(=O)N)C)C)O)OC)C'

    print(s)

    # get 请求
    # s = request.args.get("mol")

    # 返回调用 result()
    return result()


@app.route('/result', methods=['GET', 'POST'])
def result():
    xrn = []

    doi = []

    mols = []

    dois = []

    #  调用 get_sim()
    mol = search.get_sim(s)

    # 截取前3个数据
    mol = mol[0:20]

    print('mol', mol)
    # 键值对存入
    for m in mol:
        molss = {}
        molss['smiles'] = m[0]
        molss['similarity'] = m[1]
        mols.append(molss)

    # 连接数据库
    conn = pymysql.connect(host='192.168.1.104', user='root', password='', port=3306,
                           db='mysql')
    cur = conn.cursor()
    # 查询多个条件
    # sql = " SELECT * FROM `cids`  WHERE Smiles='c1(cccc(O)c1)C(=O)O' or Smiles='c1(cccc(OCCCCBr)c1)C(=O)OC'"

    # 查询 XRN

    sql = "SELECT XRN FROM cids WHERE Smiles= %s"

    # 查询出来的结果放进 xrn 中
    for smiles in mol:
        #  smiles
        val = (smiles[0],)
        cur.execute(sql, val)
        m = cur.fetchall()
        # 去掉括号
        m = m[0]
        xrn.append(m)

    print(xrn)

    # 查询 doi

    sql = "SELECT * FROM xrns WHERE XRN= %s"

    # 查询出来的结果放进 smiles 中
    for xrn in xrn:
        val = (xrn,)
        cur.execute(sql, val)
        d = cur.fetchall()
        # 去掉括号
        d = d[0]
        doi.append(d)

    print(doi)

    # 键值对存入
    for m in doi:
        doiss = {}
        doiss['XRN'] = m[0]
        doiss['doi'] = m[1]
        dois.append(doiss)

    conn.close()

    return {'dois': dois, 'mols': mols}



if __name__ == '__main__':
    # 这里host是你的后端地址，这里写0.0.0.0， 表示的是这个接口在任何服务器上都可以被访问的到，只需要前端访问该服务器地址就可以的，
    # 当然你也可以写死，如222.222.222.222， 那么前端只能访问222.222.222.222, port是该接口的端口号,
    # debug = True ,表示的是，调试模式，每次修改代码后不用重新启动服务
    # app.run(port=70, debug=True)
    app.run(port=70, debug=True, host='0.0.0.0')
